package mb.admin.webbean;

import java.util.ArrayList;

import javax.faces.model.SelectItem;

import mb.admin.dao.DepartmentsDAO;
import mb.admin.data.DepartmentsData;

/**
 * Klasa odpowiadająca za obsługę widoku 'departments.jsp'
 * 
 * @author Michał Budziło
 * 
 */
public class DepartmentsManager {
	private DepartmentsDAO dao;
	private ArrayList<DepartmentsData> dataList;
	private DepartmentsData editedData;
	private DepartmentsData newData;

	private ArrayList<SelectItem> centrumList;
	private ArrayList<SelectItem> glownyList;
	private ArrayList<SelectItem> brakList;
	private ArrayList<SelectItem> oddzialList;
	private ArrayList<SelectItem> oddzialy;

	private boolean disnadrz;
	private boolean dispozycja;

	/**
	 * Konstruktor
	 */
	public DepartmentsManager() {
		dataList = new ArrayList<DepartmentsData>();
		dao = new DepartmentsDAO();
		dataList = dao.getDepartmentsList();
		glownyList = new ArrayList<SelectItem>();
		oddzialList = new ArrayList<SelectItem>();
		centrumList = new ArrayList<SelectItem>();
		brakList = new ArrayList<SelectItem>();
		oddzialy = new ArrayList<SelectItem>();

		centrumList = dao.getCentrumList();
		oddzialList = dao.getGlownyList();

	}

	/**
	 * Metoda przygotowuje dane przez dodaniem nowego oddziału
	 */
	public void prepareAddData() {
		glownyList = new ArrayList<SelectItem>();
		glownyList.add(new SelectItem("0", "zwyczajny"));
		glownyList.add(new SelectItem("1", " główny"));
		glownyList.add(new SelectItem("2", "centrum dystrybucji"));
		brakList.add(new SelectItem("0", "brak"));

		newData = new DepartmentsData();

		centrumList = dao.getCentrumList();
		oddzialList = dao.getGlownyList();

		if (newData.getGlowny() != null) {
			if (newData.getGlowny() == 1) {
				dispozycja = false;
				disnadrz = false;
				oddzialy = centrumList;

			} else if (newData.getGlowny() == 0) {
				dispozycja = true;
				disnadrz = false;
				oddzialy = oddzialList;
			} else {
				dispozycja = true;
				disnadrz = true;
				oddzialy = oddzialList;
			}

		} else {
			dispozycja = false;
			disnadrz = false;
			oddzialy = oddzialList;
		}

	}

	/**
	 * Metoda dodaje do bazy danych nowy oddział
	 */
	public void addData() {
		dao.insertData(newData);
		refreshData();
	}

	/**
	 * Metoda przygotowuje dane przed edycją oddziału
	 */
	public void prepareEditData() {
	
		glownyList = new ArrayList<SelectItem>();
		glownyList.add(new SelectItem("0", "zwyczajny"));
		glownyList.add(new SelectItem("1", " główny"));
		glownyList.add(new SelectItem("2", "centrum dystrybucji"));

		centrumList = dao.getCentrumList();
		oddzialList = dao.getGlownyList();

		if (editedData.getGlowny() == 1) {
			dispozycja = false;
			disnadrz = false;
			oddzialy = centrumList;

		} else if (editedData.getGlowny() == 0) {
			dispozycja = true;
			disnadrz = false;
			oddzialy = oddzialList;
		} else {
			dispozycja = true;
			disnadrz = true;
			oddzialy = oddzialList;
		}
	}

	/**
	 * Metoda edytuje oddział w bazie danych
	 */
	public void editData() {
		dao.updateData(editedData);
	}

	/**
	 * Metoda aktualizuje listę oddziałów
	 */
	public void changedGlowny() {
		if (editedData.getGlowny() == 1) {
			dispozycja = false;
			disnadrz = false;
			oddzialy = centrumList;

		} else if (editedData.getGlowny() == 0) {
			dispozycja = true;
			disnadrz = false;
			oddzialy = oddzialList;
		} else {
			dispozycja = true;
			disnadrz = true;
			oddzialy = oddzialList;
		}
	}

	/**
	 * Metoda aktualizuje listę oddziałów
	 */
	public void changedGlowny2() {
		if (newData.getGlowny() != null) {
			if (newData.getGlowny() == 1) {
				dispozycja = false;
				disnadrz = false;
				oddzialy = centrumList;

			} else if (newData.getGlowny() == 0) {
				dispozycja = true;
				disnadrz = false;
				oddzialy = oddzialList;
			} else {
				dispozycja = true;
				disnadrz = true;
				oddzialy = oddzialList;
			}

		} else {
			dispozycja = false;
			disnadrz = false;
			oddzialy = oddzialList;
		}
	}

	/**
	 * Metoda usuwa z bazy danych oddział
	 */
	public void deleteData() {
		dao.deleteData(editedData);
		refreshData();
	}

	/**
	 * Metoda wczytuje z bazy danych listę oddziałów
	 */
	public void refreshData() {
		dataList = dao.getDepartmentsList();
	}

	/**
	 * @return the glownyList
	 */
	public ArrayList<SelectItem> getGlownyList() {
		return glownyList;
	}

	/**
	 * @param glownyList
	 *            the glownyList to set
	 */
	public void setGlownyList(ArrayList<SelectItem> glownyList) {
		this.glownyList = glownyList;
	}

	/**
	 * @return the dataList
	 */
	public ArrayList<DepartmentsData> getDataList() {
		return dataList;
	}

	/**
	 * @param dataList
	 *            the dataList to set
	 */
	public void setDataList(ArrayList<DepartmentsData> dataList) {
		this.dataList = dataList;
	}

	/**
	 * @return the editedData
	 */
	public DepartmentsData getEditedData() {
		return editedData;
	}

	/**
	 * @param editedData
	 *            the editedData to set
	 */
	public void setEditedData(DepartmentsData editedData) {
		this.editedData = editedData;
	}

	/**
	 * @return the centrumList
	 */
	public ArrayList<SelectItem> getCentrumList() {
		return centrumList;
	}

	/**
	 * @param centrumList
	 *            the centrumList to set
	 */
	public void setCentrumList(ArrayList<SelectItem> centrumList) {
		this.centrumList = centrumList;
	}

	/**
	 * @return the oddzialList
	 */
	public ArrayList<SelectItem> getOddzialList() {
		return oddzialList;
	}

	/**
	 * @param oddzialList
	 *            the oddzialList to set
	 */
	public void setOddzialList(ArrayList<SelectItem> oddzialList) {
		this.oddzialList = oddzialList;
	}

	/**
	 * @return the oddzialy
	 */
	public ArrayList<SelectItem> getOddzialy() {
		return oddzialy;
	}

	/**
	 * @param oddzialy
	 *            the oddzialy to set
	 */
	public void setOddzialy(ArrayList<SelectItem> oddzialy) {
		this.oddzialy = oddzialy;
	}

	/**
	 * @return the newData
	 */
	public DepartmentsData getNewData() {
		return newData;
	}

	/**
	 * @param newData
	 *            the newData to set
	 */
	public void setNewData(DepartmentsData newData) {
		this.newData = newData;
	}

	/**
	 * @return the disnadrz
	 */
	public boolean isDisnadrz() {
		return disnadrz;
	}

	/**
	 * @param disnadrz
	 *            the disnadrz to set
	 */
	public void setDisnadrz(boolean disnadrz) {
		this.disnadrz = disnadrz;
	}

	/**
	 * @return the dispozycja
	 */
	public boolean isDispozycja() {
		return dispozycja;
	}

	/**
	 * @param dispozycja
	 *            the dispozycja to set
	 */
	public void setDispozycja(boolean dispozycja) {
		this.dispozycja = dispozycja;
	}

}
